<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>

<!--父组件模板-->
<div id="app">
  <!--
    不写小括号会默认携带事件，子组件哪有默认事件。
    所以会将子组件中的事件携带给父组件-->
  <Wind v-on:item-click="cpnClick"></Wind>
</div>

<!--子组件模板-->
<template id="cpn">
  <div>
    <button v-for="item in categories"
            @click="btnClick(item.id)">
      {{item.name}}
    </button>
  </div>
</template>
<script>

  // 子组件
  Vue.component("Wind", {
    template: "#cpn",
    data() {
      return {
        categories: [
          {id: 1, name: "热门推荐"},
          {id: 2, name: "手机数码"},
          {id: 3, name: "家用家电"},
          {id: 4, name: "电脑办公"},
          {id: 5, name: "成人用品"}
        ]
      };
    },
    methods: {
      btnClick(item) {
        // 子组件发射事件|自定义事件名， 传递给父组件的值
        this.$emit("item-click", item);
        // console.log(item + "被点击了");
      }
    }
  })

  // 父组件
  var vm = new Vue({
    el: '#app',
    methods: {
      cpnClick(item) {
        console.log(item);
      }
    }
  })
</script>
</body>
</html>